'use strict'

class CodedError extends Error {
    constructor (message = '未知错误', code = -1) {
        super(message)
        this.code = code
    }
}

module.exports = {
    CodedError,
    /**
     * 拒绝访问构造函数
     */
    ForbiddenError: class ForbiddenError extends CodedError {
        constructor (message = '拒绝访问') {
            super(message, 403)
        }
    },
    /**
     * 无效的参数构造函数
     */
    InvalidQueryError: class InvalidQueryError extends CodedError {
        constructor (message = '无效的参数') {
            super(message, 400)
        }
    },

    /**
     * 注册时用户名重复
     */
    UsernameRepeatError: class UsernameRepeatError extends CodedError {
        constructor (message = '用户名重复') {
            super(message, 10000)
        }
    },

    /**
     * 登录时未查询到用户或者密码错误
     */
    NoSuchUserError: class NoSuchUserError extends CodedError {
        constructor (message = '用户名或密码不正确') {
            super(message, 10001)
        }
    },


    /**
     * 未开放注册
     */
    RefuseRegisterError: class RefuseRegisterError extends CodedError {
        constructor (message = '暂未开放注册') {
            super(message, 10002)
        }
    },


    /**
     * 内容不合法
     */
    ContentError: class ContentError extends CodedError {
        constructor (message = '内容不合法') {
            super(message, 10003)
        }
    },
}
